import type { AxiosPromise } from "axios";

// 用户认证相关接口
export interface AuthApi {
  /** 动态互斥角色列表. */
  selectDsdRoles(): AxiosPromise;
  /** 用户登录. */
  login(data: LoginData): AxiosPromise<LoginResult>;
  /** 刷新Token. */
  refreshToken(token: string): AxiosPromise<LoginResult>;
  /** 登出.  */
  logout(accessToken: string): AxiosPromise;
  /** 获取验证码. */
  captcha(): AxiosPromise<CaptchaResult>;
  /** 获取当前登录用户信息. */
  userInfo(): AxiosPromise<UserInfo>;
  /** 获取当前登录用户角色权限. */
  userRolesPerms(): AxiosPromise<RolesPerms>;
  /** 修改当前登录用户个人信息. */
  updateUser(data: any): AxiosPromise;
  /** 修改当前登录用户个人密码. */
  updatePwd(encodeOldPwd: string, encodeNewPwd: string): AxiosPromise;
  /** 允许切换身份的用户列表. */
  allowRunAsUser(): AxiosPromise;
  /** 切换到该用户身份. */
  runAsUser(userId: string): AxiosPromise;
  /** 获取手机号验证码. */
  sendMobileCode(data: any): AxiosPromise<CaptchaResult>;
  /** 手机号验证码登录. */
  mobileCodeLogin(data: any): AxiosPromise<CaptchaResult>;
  /** 获取部门Tree. */
  deptTree(deptId?: string): AxiosPromise;
  /** 获取岗位Tree. */
  jobTree(): AxiosPromise;
}

/**
 * 登录用户信息
 */
export interface UserInfo {
  userId?: string; // 用户ID
  loginName?: string; // 用户名
  nickName?: string; // 昵称
  avatar?: string; // 头像
}

/**
 * 登录请求参数
 */
export interface LoginData {
  /**
   * 互斥角色
   */
  scope: string;

  /**
   * 用户名
   */
  username: string;

  /**
   * 密码
   */
  password: string;

  /**
   * 验证码缓存key
   */
  captchaKey?: string;

  /**
   * 验证码
   */
  captchaCode?: string;
}

/**
 * 登录响应
 */
export interface LoginResult {
  /**
   * 访问token
   */
  accessToken?: string;

  /**
   * 过期时间(单位：毫秒)
   */
  expiresIn: number;

  expiresDate?: number;
  /**
   * 刷新token
   */
  refreshToken?: string;

  /**
   * token 类型
   */
  tokenType?: string;
  //存放登录Tenant
  tenant?: string;
}

/**
 * 验证码响应
 */
export interface CaptchaResult {
  /** 验证码缓存key */
  captchaId: string;
  /** 问题 */
  question: string;
  /** 验证码图片Base64字符串 */
  base64Image: string;
}

// 60s倒计时
export interface SendModelRef {
  /**
   * 操作内容
   */
  content: string;

  /**
   * 倒计时
   */
  timers: number;

  /**
   * 按钮启用/禁用
   */
  disabled: boolean;
}

/**
 * 找回密码
 */
export interface VerificateRef {
  /**
   * 邮箱、手机号
   */
  name: string;

  /**
   * 图片验证码ID
   */
  captchaId: string;

  /**
   * 图片验证码
   */
  captchaCode: string;

  /**
   * 手机号、邮箱的验证码
   */
  validCode: string;
}

/**
 * 修改密码
 */
export interface UpdatePwdForm {
  /**
   * 旧密码
   */
  encodeOldPwd: string;

  /**
   * 新密码
   */
  encodeNewPwd: string;

  /**
   * 确认密码
   */
  confirmPwd: string;
}

/**
 * 找回密码
 */
export interface FindPwdRef {
  /**
   * 租户
   */
  tenant: string;

  /**
   * 新密码
   */
  pwd: string;

  /**
   * 确认密码
   */
  repeatPwd: string;

  /**
   * 手机号、邮箱
   */
  name: string;

  /**
   * 手机号、邮箱的验证码
   */
  validCode: string;

  /**
   * 目录ID
   */
  directoryId: string;
}

// 新增编辑表单
export interface UserForm {
  tenant?: string; // 租户
  updateMask?: string; // 更新字段掩码
  requestId?: string; // 用于检测重复请求的唯一字符串ID
  userId?: string; // 用户ID
  repeatPwd?: string; // 密码
  avatar?: string; // 头像
  directoryId?: string; // 目录
  loginName?: string; // 用户名
  nickName?: string; // 昵称
  realName?: string; // 姓名
  birthDate?: string; // 出生日期
  gender?: string; // 性别
  mobilePhone?: string; // 手机号
  roleIds: Array<string>; // 所属角色
  email?: string; // 邮箱
  status?: string; // 状态
  pwd?: string; // 密码
  userJobs?: UserJobsItem[]; // 所属部门、岗位
  phoneApproved?: boolean; // 手机号是否验证
  emailApproved?: boolean; // 邮箱是否验证
}

// 所属部门、岗位
export interface UserJobsItem {
  deptId: string; // 部门
  jobId: string; // 岗位
}

// 角色权限
export interface RolesPerms {
  //角色数组
  roleCodes: string[];
  //权限数组
  permCodes: string[];
}
